package main

import (
	"fmt"
	"image/color"

	"gocv.io/x/gocv"
)

func main() {
	// 打开摄像头
	webcam, err := gocv.OpenVideoCapture(0)
	if err != nil {
		fmt.Println("无法打开摄像头:", err)
		return
	}
	defer webcam.Close()

	// 设置分辨率
	webcam.Set(gocv.VideoCaptureFrameWidth, 640)
	webcam.Set(gocv.VideoCaptureFrameHeight, 480)

	// 加载人脸检测模型
	faceCascade := gocv.NewCascadeClassifier()
	defer faceCascade.Close()

	// 加载默认的 Haar 人脸检测分类器
	if !faceCascade.Load("coco.names") {
		fmt.Println("无法加载人脸检测模型")
		return
	}

	// 创建窗口显示视频
	window := gocv.NewWindow("YUYV422 Camera with Face Detection")
	defer window.Close()

	// 用于保存摄像头每一帧
	img := gocv.NewMat()
	defer img.Close()

	for {
		// 从摄像头捕获一帧
		if ok := webcam.Read(&img); !ok {
			fmt.Println("无法读取视频帧")
			break
		}

		// 转换为灰度图像
		gray := gocv.NewMat()
		defer gray.Close()
		gocv.CvtColor(img, &gray, gocv.ColorBGRToGray)

		// 检测人脸
		faces := faceCascade.DetectMultiScale(gray)
		for _, face := range faces {
			// 在每个人脸周围绘制矩形
			gocv.Rectangle(&img, face, color.RGBA{1, 255, 0, 0}, 2)
		}

		// 显示图像
		window.IMShow(img)

		// 如果按下 'q' 键，退出程序
		if window.WaitKey(1) == 113 {
			break
		}
	}
}
